\chapter{Setf expanders}

The \hs{} requires%
\footnote{See figure 5.7 in section 5.1.2.2 in the \hs{}.} 
the following function call forms to have a corresponding
\texttt{setf} form:

\begin{itemize}
\item Accessors for parts of a list: \texttt{car}, \texttt{cdr},
  \texttt{caar}, \texttt{cadr}, \texttt{cdar}, \texttt{cddr},
  \texttt{caaar}, \texttt{caadr}, \texttt{cadar}, \texttt{caddr},
  \texttt{cdaar}, \texttt{cdadr}, \texttt{cddar}, \texttt{cdddr},
  \texttt{caaaar}, \texttt{caaadr}, \texttt{caadar}, \texttt{caaddr},
  \texttt{cadaar}, \texttt{cadadr}, \texttt{caddar}, \texttt{cadddr},
  \texttt{cdaaar}, \texttt{cdaadr}, \texttt{cdadar}, \texttt{cdaddr},
  \texttt{cddaar}, \texttt{cddadr}, \texttt{cdddar}, \texttt{cddddr},
  \texttt{first}, \texttt{second}, \texttt{third}, \texttt{fourth},
  \texttt{fifth}, \texttt{sixth}, \texttt{seventh}, \texttt{eighth},
  \texttt{ninth}, \texttt{tenth} \texttt{rest}, \texttt{nth}.
\item Array element accessors: \texttt{aref}, \texttt{row-major-aref},
  \texttt{char}, \texttt{schar}, \texttt{bit}, \texttt{sbit},
  \texttt{svref}.
\item Other array accessors: \texttt{fill-pointer}
\item Sequence element accessors: \texttt{elt}.
\item Other sequence accessors: \texttt{subseq}.
\item Symbol properties: \texttt{symbol-plist}.
\item Environment accessors: \texttt{symbol-function},
  \texttt{symbol-value}, \texttt{fdefinition},
  \texttt{macro-function}, \texttt{compiler-macro-function}.
\item Hash table accessors: \texttt{gethash}.
\item CLOS-related accessors: \texttt{class-name},
  \texttt{slot-value}, \texttt{find-class}.
\item Miscellaneous: \texttt{documentation},
  \texttt{logical-pathname-translations}, \texttt{get},
  \texttt{readtable-case}.
\end{itemize}

The \hs{} also gives the implementer a choice concerning the
implementation of \texttt{setf} forms either as functions or as
\texttt{setf} expanders.  For \sysname{} we always choose a function
whenever possible.  Consequently, every \texttt{setf} form in
the list above is implemented as a function.


